前言
RxJava和Retrofit也火了一段时间了。一直没有时间研究这些新东西,最近有时间准备写个项目练手,打算先用Android写一个Demo出来,却发现Android的世界发生了天翻地覆的变化,EventBus和OKHttp3 都不见了,RxJava和Retrofit是什么东东?
如果你对Retrofit不熟悉就先看 官网的介绍
如果你对RxJava不熟悉请先看 官网介绍 以及 gank.io
给 Android 开发者的 RxJava 详解 这篇文章
当然也有很多RxJava与Retrofit的文章,我是参考tough1985
大神的 这篇文章
学(好)习(记)就(性)要(不)做(如)个(烂)笔(笔)记(头)
RxJava如何与Retrofit结合
本文实现的目标
- RxJava如何与Retrofit结合
- 相同格式的Http请求数据该如何封装
- 相同格式的Http请求数据统一进行预处理
- 如何取消一个Http请求 – 观察者之间的对决,Oberver VS Subscriber
- 一个需要ProgressDialog的Subscriber该有的样子
添加依赖包
先贴出build.gradle
文件的内容
本文是基于RxJava 1.1.6
和 Retrofit 2.1.0
来进行的。 添加rxandroid
是因为rxjava
中的线程问题。
如需查看项目代码 –> 代码地址:https://github.com/Javen205/SmartCloud
选择Tag1
原生的Retrofit请求
添加Retrofit 接口
|
|
Fragment 或者Activity中 调用
|
|
添加Rxjava
Retrofit本身对Rxjava提供了支持。
添加Retrofit对Rxjava的支持需要在Gradle文件中添加
|
|
上文中已经添加
然后在创建Retrofit的过程中添加如下代码:
|
|
这样一来我们定义的service返回值就不在是一个Call了,而是一个Observable
重新定义 JokeService 方法
|
|
getJokes方法改为:
|
|
这样基本上就完成了Retrofit和Rxjava的结合,但是这样封装还是不太满意。
接下来我们把创建Retrofit的过程封装一下,然后希望Activity/Fargment创建Subscriber对象传进来。
将请求过程进行封装
创建一个对象HttpMethods
|
|
用一个单例来封装该对象,在构造方法中创建Retrofit和对应的Service。 如果需要访问不同的基地址,那么你可能需要创建多个Retrofit对象,或者干脆根据不同的基地址封装不同的HttpMethod类。
再来看Activity/Fargment中的getJokes方法: 以下代码中的 getJokes3
|
|
相同格式的Http请求数据该如何封装
参考资料 RxJava+Retrofit,在联网返回后如何先进行统一的判断?
查看封装最终结果 选择Tag2
实现聚合笑话加载刷新 选择Tag3
实现干货网福利(图片)接口 选择Tag4